/**
 * 
 */
package net.sf.rose.util;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;

/**
 * @author fengjian
 * 
 */
public class DateFormat {

	private String datePattern = null;

	/**
	 * 
	 */
	public DateFormat() {
	}

	/**
	 * 
	 */
	public DateFormat(String datePattern) {
		this.datePattern = datePattern;
	}

	/**
	 * 
	 */
	public String getDatePattern() {
		return datePattern;
	}

	/**
	 * 
	 */
	public void setDatePattern(String datePattern) {
		this.datePattern = datePattern;
	}

	/**
	 * @param args
	 */
	public Timestamp toTimestamp(String arg) {
		Date d = format(arg);
		if (d != null) {
			return new Timestamp(d.getTime());
		}
		return null;
	}

	/**
	 * 
	 */
	public Date format(String arg) {
		if (datePattern == null || arg == null) {
			return null;
		}
		if (datePattern.length() != arg.length()) {
			return null;
		}
		// 年
		int t = 0;
		int i = datePattern.indexOf('y');
		int j = datePattern.lastIndexOf('y');
		Calendar c = Calendar.getInstance();
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.YEAR, t);
		}
		// 月
		i = datePattern.indexOf('M');
		j = datePattern.lastIndexOf('M');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1)) - 1;
			c.set(Calendar.MONTH, t);
		}
		// 日
		i = datePattern.indexOf('d');
		j = datePattern.lastIndexOf('d');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.DAY_OF_MONTH, t);
		}
		// 时
		i = datePattern.indexOf('H');
		j = datePattern.lastIndexOf('H');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.HOUR_OF_DAY, t);
		}
		// 分
		i = datePattern.indexOf('m');
		j = datePattern.lastIndexOf('m');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.MINUTE, t);
		}
		// 秒
		i = datePattern.indexOf('s');
		j = datePattern.lastIndexOf('s');
		if (i != -1 && j != -1) {
			t = Integer.parseInt(arg.substring(i, j + 1));
			c.set(Calendar.SECOND, t);
		}
		return new java.sql.Timestamp(c.getTime().getTime());
	}

	/**
	 * 
	 */
	public String format(Date date) {
		if (datePattern == null || date == null) {
			return null;
		}
		StringBuffer buf = new StringBuffer(datePattern);
		// 年
		int i = datePattern.indexOf('y');
		int j = datePattern.lastIndexOf('y');
		Calendar c = Calendar.getInstance();
		if (i != -1 && j != -1) {
			String year = c.get(Calendar.YEAR) + "";
			int len = j - i + 1;
			year = year.substring(year.length() - len, year.length());
			buf.replace(i, j + 1, year);
		}
		// 月
		i = datePattern.indexOf('M');
		j = datePattern.lastIndexOf('M');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.MONTH) + 1 + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 日
		i = datePattern.indexOf('d');
		j = datePattern.lastIndexOf('d');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.DAY_OF_MONTH) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 时
		i = datePattern.indexOf('H');
		j = datePattern.lastIndexOf('H');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.HOUR_OF_DAY) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 分
		i = datePattern.indexOf('m');
		j = datePattern.lastIndexOf('m');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.MINUTE) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		// 秒
		i = datePattern.indexOf('s');
		j = datePattern.lastIndexOf('s');
		if (i != -1 && j != -1) {
			String str = c.get(Calendar.SECOND) + "";
			int len = j - i + 1;
			// 如果模板长度是2
			if (len == 2) {
				// 如果实际长度是2
				if (str.length() == 2) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, "0" + str);
				}
			}
			// 如果模板长度是1
			else {
				// 如果实际长度是1
				if (str.length() == 1) {
					buf.replace(i, j + 1, str);
				} else {
					buf.replace(i, j + 1, str.substring(1));
				}
			}
		}
		return buf.toString();
	}

	/**
	 * 
	 */
	public static void main(String[] args) {
		DateFormat bean = new DateFormat();
		bean.setDatePattern("yyyy-MM-dd HH:mm:ss");
		System.out.println(bean.format("2003-11-01 11:10:24"));
		bean.setDatePattern("yy-MM-dd HH:mm:ss");
		System.out.println(bean.format("13-01-01 11:10:24"));
		bean.setDatePattern("MMdd");
		System.out.println(bean.format(new Date()));
	}
}
